
/**
 * 文件名称:  AopAspect.java
 * 文件序号:  序号
 * 内容描述:  文件简单描述，多行换行书写
 * 版权声明:  山东鸿蝶信息技术有限公司
 * 创建用户:  zhangkai
 * 创建日期:  2016/12/28 13:58
 * 修改用户:  无
 * 修改日期:  无
 * 修改说明:  无
 * 文件版本:  V1.0
 * 文件路径:
 */
package com.hongdee.base.aop;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

import org.springframework.stereotype.Component;

/**
 * 名  称:AopAspect
 * 类  型: class
 * 描  述: 全局异常处理切片，向数据库中插入异常信息
 * 路  径:com.hongdee.base.aop
 * 作  者:zhangkai
 * 日  期:2016/12/28 13:58
 */
@Aspect
@Component
public class ExceptionAop {

    /**
     * 日志
     */
    private Log logger = LogFactory.getLog(this.getClass());

    /**
     * @param jp 执行句柄
     * @param ex 异常
     * @return
     * @throws Exception
     * @desc 抛出异常之后处理
     * @author zhangkai
     * @date 2017/2/8
     * @time 18:00
     * @update_user
     * @update_time
     * @update_desc:
     */
    @AfterThrowing(pointcut = "errorException()", throwing = "ex")
    public void afterThrowing(JoinPoint jp, Exception ex) throws Exception {
        // 此处记录日志文件
        // 后期记录到数据库中
        logger.error(ex);
        throw ex;
    }

    /**
     * @param jp 执行句柄
     * @return jp.proceed(); 继续执行
     * @throws Throwable 不知道什么意思
     * @desc
     * @author zhangkai
     * @date 2017/2/8
     * @time 18:00
     * @update_user
     * @update_time
     * @update_desc:
     */
    @Around(value = "errorException()")
    public Object around(ProceedingJoinPoint jp) throws Throwable {

        // System.out.println("什么都没干");
        return jp.proceed();
    }

    /**
     * @param
     * @param
     * @return
     * @throws Exception
     * @desc 方法执行之前处理逻辑
     * @author zhangkai
     * @date 2017/2/8
     * @time 17:59
     * @update_user
     * @update_time
     * @update_desc:
     */
    @Before("errorException()")
    public void before() {

        // System.out.println("前置条件");
    }

    /**
     * @throws Exception
     * @desc 定义捕获Service或Dao层的异常切点
     * @author zhangkai
     * @date 2017/2/8
     * @time 17:59
     * @update_user
     * @update_time
     * @update_desc:
     */
    @Pointcut(value = "execution(public * com.hongdee.*..*(..)) && @target(org.springframework.stereotype.Service)")
    public void errorException() {
    }
}


//~ Formatted by Jindent --- http://www.jindent.com
